import tensorflow as tf  
import numpy as np  
import datetime  
import os  
  
# 1. 生成一些示例数据  
np.random.seed(42)  
X_train = np.random.rand(100, 10)  # 100 个样本，每个样本有 10 个特征  
y_train = np.random.rand(100, 1)   # 100 个样本，每个样本有 1 个输出  
  
# 2. 定义模型  
model = tf.keras.Sequential([  
    tf.keras.layers.Dense(64, activation='relu', input_shape=(10,)),  # 输入层和第一个隐藏层  
    tf.keras.layers.Dense(32, activation='relu'),  # 第二个隐藏层  
    tf.keras.layers.Dense(1)  # 输出层  
])  
  
# 3. 编译模型  
model.compile(optimizer='adam', loss='mse')  
  
# 4. 创建 TensorBoard 回调  
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")  
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)  
  
# 5. 训练模型（为了展示 TensorBoard，这里添加一个简单的训练步骤）  
model.fit(X_train, y_train, epochs=10, callbacks=[tensorboard_callback])  
  
# 6. 前向传播（可选，因为我们已经训练了模型，但这里还是展示一下）  
predictions = model(X_train)  
  
# 7. 打印预测值和实际值（可选）  
print("Predictions:\n", predictions.numpy())  
print("Actual values:\n", y_train)  
  
# 8. 计算损失（可选，因为我们已经在训练过程中计算了损失）  
loss_fn = tf.keras.losses.MeanSquaredError()  
loss = loss_fn(y_train, predictions)  
print("Loss:", loss.numpy())  
  
# 9. 可以使用 model.summary() 查看模型结构（可选）  
model.summary()  
  
# 10. 启动 TensorBoard（通常在命令行中执行，但也可以在 Python 代码中通过 subprocess 调用）  
# 在命令行中执行以下命令：  
# tensorboard --logdir=logs/fit  
  
# 或者在 Python 代码中使用 subprocess 启动 TensorBoard（这里只展示命令行方式）
